﻿using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using Biblioteca.Utils;
using SERIX.Util;
using Biblioteca.DataBase;
using System.Data.OracleClient;
using SERIX.Classes;
using System;

namespace SERIX
{
    public partial class PropriedadesManut : Seguranca
    {

        string _operacao;
        string _idt_prop;
        string _idt_com = "";
        string _filtro = "";
        string _idt_benef = "";
        string _idt_benef_vinc;
        string _idt_vinc_prop;
        int area_disponivel = 0;
        string cond_prod;
        double AreaLivre;
        double AreaBenef;
        
        CPropriedades obj = new CPropriedades();





        protected void Page_Load(object sender, EventArgs e)
        {


            base.OnLoad(e);

            _operacao = Request["OP"];
            if (!String.IsNullOrEmpty(Request["idt_prop"]))
            {
                _idt_prop = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_prop"].ToString().Replace(" ", "+")));
            }
            if (!String.IsNullOrEmpty(Request["idt_com"]))
            {
                _idt_com = Server.UrlDecode(Criptografia.Descriptografar(Request["idt_com"].ToString().Replace(" ", "+")));
                _filtro = "?idt_com=" + Server.UrlEncode(Request["idt_com"]);
            }
            obj = CPropriedades.PesquisaporCodigo(_idt_prop, usuAut.Login,false);

            //COndições para a CONDIÇÃO DO PRODUTOR FUNCIONAR
            try
            {
                cond_prod = Criptografia.Descriptografar(Request["cond_prod"].ToString().Replace(" ", "+"));
            }
            catch { }
            if (Request["idt_benef_vinc"] != null)
            {
                _idt_benef_vinc = Criptografia.Descriptografar(Request["idt_benef_vinc"].ToString().Replace(" ", "+"));
                CBeneficiarios benef = CBeneficiarios.PesquisaporCodigo(_idt_benef_vinc, usuAut.Login,false);
                CTiposVincPropriedades tpoprop = CTiposVincPropriedades.PesquisaporCodigo(benef.Cond_Produtor, UsuAut.Login);

                if (cond_prod == "4" || cond_prod == "1")
                {
                    lbnomebenef.Text = "Proprietário :";
                    lbNomeBenef1.Text = benef.Nom_benef;
                    lbNomeBenef1.Text += " ( " + benef.Cpf + " )";
                    lbNomeBenef1.Visible = true;
                    txtCpf.Text = benef.Cpf;
                    txtCpf.ReadOnly = true;
                    txtNomeBenef.ReadOnly = true;
                    txtNomeBenef.Text = benef.Nom_benef; 
                }else if (cond_prod == "2"  || cond_prod == "3" || cond_prod == "5" || cond_prod == "6" || cond_prod == "7" || cond_prod == "8")
                {
                    lbnomebenef.Visible = false;
                    tbCPFVinc.Text = benef.Cpf;
                    tbCPFVinc.ReadOnly = true;
                    
                }        
            }
            

            if (!Page.IsPostBack)
            {
                BiblioSERIX.PreencherDdl(ref ddlMunicipio, CMunicipios.ObterTodos(UsuAut.Login), "NOME_MUN", "IDT_MUN");              

                switch (_operacao)
                {
                    case "E":
                        {
                            string idt_evolucao = Criptografia.Descriptografar(Request["evolucao"].Replace(" ", "+"));
                            CPropriedades dao = CPropriedades.PesquisaporCodigo(idt_evolucao, usuAut.Login, true);
                            CarregaDados(dao, null);
                            DesabilitaControles();
                            TabPanel7.Enabled = true;
                            TabPanel7.Visible = true;
                            TabPanel4.Visible = true;
                            FormView1.Visible = false;
                            GridPreencher(ref GridEspecies, "E", false);
                            GridPreencher(ref GridCulturas, "C", false);
                            GridPreencher(ref GridRecursos, "R", false);
                            GridPreencher(ref GridPastagens, "P", false);
                            GridPreencher(ref GridBenfeitorias, "N", false);
                            CheckSomenteMarcados.Visible = false;
                            CarregargvBenef(true);
                            Cancelar_Button.Visible = false;
                            break;
                        }
                    case "R":
                        {
                            TabPanel7.Visible = true;
                            lbNomeBenef1.Visible = true;
                            lbnomebenef.Visible = true;
                            lbNomeBenef1.Visible = true;
                            CPropriedades propriedades = CPropriedades.PesquisaporCodigo(_idt_prop, UsuAut.Login, false);
                            CComunidades comunidades = CComunidades.PesquisaporCodigo(propriedades.Idt_com, UsuAut.Login);
                            lbnomebenef.Visible = true;
                            lbNomeBenef1.Visible = true;
                            lbNomeBenef1.Text = propriedades.Nome_produtor;
                            lblTitulo.Text = "Detalhes do Propriedades";
                            Cancelar_Button.Visible = false;
                            CObsPropriedades obs = CObsPropriedades.PesquisaporCodigo(_idt_prop, UsuAut.Login);
                            CarregaDados(propriedades, obs);
                            DesabilitaControles();
                            
                            break;
                        }
                    case "U":
                        {
                            cbEvolucao.Visible = true;
                            CarregargvBenef(false);
                            TabPanel4.Visible = true;
                            TabPanel3.Visible = true;
                            CStatus Objeto = new CStatus("1", _idt_prop, UsuAut.Login);
                            CPropriedades propriedades = new CPropriedades();
                            propriedades = CPropriedades.PesquisaporCodigo(_idt_prop, UsuAut.Login, false);
                            Control.Visible = true;
                            if (Objeto.status == "I")
                            {
                                DesabilitaControles();
                                TabPanel4.Visible = false;
                            }
                            TabPanel7.Visible = true;
                            lbNomeBenef1.Visible = true;
                            lbnomebenef.Visible = true;
                            lbNomeBenef1.Text = propriedades.Nome_produtor;
                            CComunidades comunidades = CComunidades.PesquisaporCodigo(propriedades.Idt_com, UsuAut.Login);
                            propriedades = CPropriedades.PesquisaporCodigo(_idt_prop, UsuAut.Login, false);                            
                            lblTitulo.Text = "Alteração de Propriedades";
                            TabPanel4.Visible = true;
                            if (_idt_benef_vinc != null)
                            {
                                lbnomebenef.Text = "Proprietário";
                                tbCPFVinc.Text = CBeneficiarios.PesquisaporCodigo(_idt_benef_vinc, UsuAut.Login,false).Cpf;
                                tbCPFVinc.ReadOnly = true;
                            }
                            CObsPropriedades obs = CObsPropriedades.PesquisaporCodigo(_idt_prop, UsuAut.Login);
                            CarregaDados(propriedades, obs);
                            GridPreencher(ref GridEspecies, "E", false);
                            GridPreencher(ref GridCulturas, "C", false);
                            GridPreencher(ref GridRecursos, "R", false);
                            GridPreencher(ref GridPastagens, "P", false);
                            GridPreencher(ref GridBenfeitorias, "N", false);
                            //ObterAreaDisponivel();
                            break;

                        }
                    case "I":
                        {
                            lbnomebenef.Visible = false;
                            lbNomeBenef1.Visible= false;
                            lblTitulo.Text = "Inserção de Propriedades"; 
                            break;
                        }
                    case "D":
                        {
                            lblTitulo.Text = "Exclusão de Propriedades";
                            CPropriedades propriedades = CPropriedades.PesquisaporCodigo(_idt_prop, UsuAut.Login, false);
                            CComunidades comunidades = CComunidades.PesquisaporCodigo(propriedades.Idt_com, UsuAut.Login);
                            CObsPropriedades obs = CObsPropriedades.PesquisaporCodigo(_idt_prop, UsuAut.Login);
                            CarregaDados(propriedades, obs);
                            DesabilitaControles();
                            break;
                        }
                    default: break;
                }
            }
        }

        public void CarregaDados(CPropriedades propriedades, CObsPropriedades obs)
        {
            tbCNPJ.Text = propriedades.cnpj;
            tbAREA.Text = propriedades.Area;
            tbNOME_PROP.Text = propriedades.Nome_prop;
            tbLATITUDE.Text = propriedades.Latitude;
            tbLONGITUDE.Text = propriedades.Longitude;
            tbCOD_INCRA.Text = propriedades.Cod_incra;
            txtCpf.Text = propriedades.Cpf;
            txtNomeBenef.Text = propriedades.Nome_produtor;
            txtAreaPreser.Text = propriedades.Area_p_perm;
            txtEndereco.Text = propriedades.Ender_prop;
            txtNumero.Text = propriedades.Numero;
            txtComplemento.Text = propriedades.Complemento;
            txtBairro.Text = propriedades.Bairro;
            txtCep.Text = propriedades.Cep;
            ddlMunicipio.SelectedValue = propriedades.Municipio;
            ddlComunidade.SelectedValue = propriedades.Comunidade;
            ddlEstados.SelectedValue = propriedades.Uf_prop;
            if (obs != null)
            {
                tbObservacao.Text = obs.Obs;
            }
            tbCNPJ.Text = propriedades.cnpj;
        }
        protected void HabilitaControles()
        {
            BiblioSERIX.HabilitaControle(tbAREA);
            BiblioSERIX.HabilitaControle(tbNOME_PROP);
            BiblioSERIX.HabilitaControle(tbLATITUDE);
            BiblioSERIX.HabilitaControle(tbLONGITUDE);
            BiblioSERIX.HabilitaControle(tbCOD_INCRA);
            BiblioSERIX.HabilitaControle(tbObservacao);
            BiblioSERIX.HabilitaControle(txtAreaPreser);
            BiblioSERIX.HabilitaControle(txtCpf);
            BiblioSERIX.HabilitaControle(txtNomeBenef);
            BiblioSERIX.HabilitaControle(txtEndereco);
            BiblioSERIX.HabilitaControle(txtNumero);
            BiblioSERIX.HabilitaControle(txtComplemento);
            BiblioSERIX.HabilitaControle(txtComplemento);
            BiblioSERIX.HabilitaControle(txtCep);
            BiblioSERIX.HabilitaControle(ddlMunicipio);
            BiblioSERIX.HabilitaControle(ddlComunidade);
            BiblioSERIX.HabilitaControle(ddlEstados);
            BiblioSERIX.HabilitaControle(txtBairro);
            BiblioSERIX.HabilitaControle(tbCNPJ);
            GridBenfeitorias.Enabled = true;
            GridCulturas.Enabled = true;
            GridPastagens.Enabled = true;
            GridRecursos.Enabled = true;
            GridEspecies.Enabled = true;
        }
        protected void DesabilitaControles()
        {
            BiblioSERIX.DesabilitaControle(tbAREA);
            BiblioSERIX.DesabilitaControle(tbNOME_PROP);
            BiblioSERIX.DesabilitaControle(tbLATITUDE);
            BiblioSERIX.DesabilitaControle(tbLONGITUDE);
            BiblioSERIX.DesabilitaControle(tbCOD_INCRA);
            BiblioSERIX.DesabilitaControle(tbObservacao);
            BiblioSERIX.DesabilitaControle(txtAreaPreser);
            BiblioSERIX.DesabilitaControle(txtCpf);
            BiblioSERIX.DesabilitaControle(txtNomeBenef);
            BiblioSERIX.DesabilitaControle(txtEndereco);
            BiblioSERIX.DesabilitaControle(txtNumero);
            BiblioSERIX.DesabilitaControle(txtComplemento);
            BiblioSERIX.DesabilitaControle(txtComplemento);
            BiblioSERIX.DesabilitaControle(txtCep);
            BiblioSERIX.DesabilitaControle(ddlMunicipio);
            BiblioSERIX.DesabilitaControle(ddlComunidade);
            BiblioSERIX.DesabilitaControle(ddlEstados);          
            BiblioSERIX.DesabilitaControle(txtBairro);
            BiblioSERIX.DesabilitaControle(tbCNPJ);
            GridBenfeitorias.Enabled = false;
            GridCulturas.Enabled = false;
            GridPastagens.Enabled = false;
            GridRecursos.Enabled = false;
            GridEspecies.Enabled = false;
        }

        protected void Ok_Button_Click(object sender, EventArgs e)
        {
                bool SomaAreasOK = false;
                CPropriedades propriedades;
                CObsPropriedades obs;
                if (String.IsNullOrEmpty(_idt_prop) && _operacao[0].Equals('I'))
                {
                    _idt_prop = CPropriedades.ObterNovoIdt(UsuAut.Login).ToString();
                }
                try
                {
                    propriedades = new CPropriedades(_idt_prop, ddlComunidade.SelectedItem.Value, tbAREA.Text, tbNOME_PROP.Text, tbLATITUDE.Text, tbLONGITUDE.Text, tbCOD_INCRA.Text, txtNomeBenef.Text, BiblioSERIX.RemoveCharsEspeciais(txtCpf.Text), txtAreaPreser.Text, txtEndereco.Text, txtNumero.Text, txtComplemento.Text, txtBairro.Text, BiblioSERIX.RemoveCharsEspeciais(txtCep.Text), ddlMunicipio.SelectedItem.Value, ddlComunidade.SelectedItem.Value, ddlEstados.SelectedItem.Text, _idt_benef_vinc, BiblioSERIX.RemoveCharsEspeciais(tbCNPJ.Text));
                }
                catch
                {
                    propriedades = CPropriedades.PesquisaporCodigo(_idt_prop, UsuAut.Login, false);
                    propriedades = new CPropriedades(_idt_prop, ddlComunidade.SelectedItem.Value, tbAREA.Text, tbNOME_PROP.Text, tbLATITUDE.Text, tbLONGITUDE.Text, tbCOD_INCRA.Text, txtNomeBenef.Text, BiblioSERIX.RemoveCharsEspeciais(txtCpf.Text), txtAreaPreser.Text, txtEndereco.Text, txtNumero.Text, txtComplemento.Text, txtBairro.Text, BiblioSERIX.RemoveCharsEspeciais(txtCep.Text), ddlMunicipio.SelectedItem.Value, ddlComunidade.SelectedItem.Value, ddlEstados.SelectedItem.Text, propriedades.idt_benef, BiblioSERIX.RemoveCharsEspeciais(tbCNPJ.Text));

                }
                obs = new CObsPropriedades(_idt_prop, tbObservacao.Text);
                try
                {
                    switch (_operacao)
                    {
                        case "E":
                            {
                                Response.Redirect("/Historico.aspx");
                                break;
                            }
                        case "I":
                            {

                                propriedades.Inserir(UsuAut.Login, false);
                                obs.Inserir(UsuAut.Login);
                                CLogCadastro LogCadastro = new CLogCadastro();
                                LogCadastro = LogCadastro.Inserir("1", UsuAut.Login, _idt_prop);
                                PrimeiroVinculoBeneficiario(propriedades);
                                //Chama metodos para gravar a evolução
                                propriedades = CPropriedades.PesquisaporCodigo(propriedades.Idt_prop, usuAut.Login, false);
                                propriedades.Idt_Evolucao = CPropriedades.ObterIdtEvolucao();
                                propriedades.data_primeira = LogCadastro.Log_Primeiro;
                                propriedades.data_ultima = LogCadastro.Log_Ultima;
                                propriedades.User_primeira = LogCadastro.Usuario_Ini;
                                propriedades.User_ultima = LogCadastro.Usuario_fim;
                                propriedades.Inserir(usuAut.Login, true);
                                BensPropriedades("E", ref GridEspecies, true, propriedades.Idt_Evolucao);
                                BensPropriedades("C", ref GridCulturas, true, propriedades.Idt_Evolucao);
                                BensPropriedades("R", ref GridRecursos, true, propriedades.Idt_Evolucao);
                                BensPropriedades("P", ref GridPastagens, true, propriedades.Idt_Evolucao);
                                BensPropriedades("N", ref GridBenfeitorias, true, propriedades.Idt_Evolucao);
                                EvolucaoVinculos(propriedades.Idt_Evolucao);
                                break;
                            }
                        case "U":
                            {
                                propriedades.Alterar(UsuAut.Login);
                                CLogCadastro LogCadastro = new CLogCadastro();
                                LogCadastro = LogCadastro.Alterar("1", UsuAut.Login, _idt_prop);
                                try
                                {
                                    obs.Inserir(UsuAut.Login);
                                }
                                catch (Exception erro)
                                {
                                    obs.Alterar(UsuAut.Login);
                                }                                
                                if (VerificarAreaSubCadastros() > (double.Parse(propriedades.Area) - double.Parse(propriedades.Area_p_perm)))
                                {
                                    SomaAreasOK = false;
                                }
                                else
                                {
                                    SomaAreasOK = true;
                                    AtualizarGridBens(ref GridEspecies, "E");
                                    AtualizarGridBens(ref GridCulturas, "C");
                                    AtualizarGridBens(ref GridRecursos, "R");
                                    AtualizarGridBens(ref GridPastagens, "P");
                                    AtualizarGridBens(ref GridBenfeitorias, "N");
                                }
                                //Evolução
                                if (cbEvolucao.Checked == true)
                                {
                                    propriedades = CPropriedades.PesquisaporCodigo(propriedades.Idt_prop, usuAut.Login, false);
                                    propriedades.Idt_Evolucao = CPropriedades.ObterIdtEvolucao();
                                    propriedades.data_primeira = LogCadastro.Log_Primeiro;
                                    propriedades.data_ultima = LogCadastro.Log_Ultima;
                                    propriedades.User_primeira = LogCadastro.Usuario_Ini;
                                    propriedades.User_ultima = LogCadastro.Usuario_fim; try
                                    {
                                        propriedades.Inserir(usuAut.Login, true);
                                        BensPropriedades("E", ref GridEspecies, true, propriedades.Idt_Evolucao);
                                        BensPropriedades("C", ref GridCulturas, true, propriedades.Idt_Evolucao);
                                        BensPropriedades("R", ref GridRecursos, true, propriedades.Idt_Evolucao);
                                        BensPropriedades("P", ref GridPastagens, true, propriedades.Idt_Evolucao);
                                        BensPropriedades("N", ref GridBenfeitorias, true, propriedades.Idt_Evolucao);
                                        EvolucaoVinculos(propriedades.Idt_Evolucao);
                                    }
                                    catch (Exception erro)
                                    {
                                       
                                    }
                                }
                                break;
                            }
                        case "D":
                            {
                                obs.Excluir(UsuAut.Login);
                                propriedades.Excluir(UsuAut.Login);
                                break;
                            }
                        case "R":
                            {
                                Response.Redirect("Propriedades.aspx" + _filtro);
                                break;
                            }
                        default: break;
                    }
                }
                catch (Exception ex)
                {
                    Label1.Text = "*Erro: " + ex.Message;
                    PanelErro.Visible = true;
                }
                if (Session["desabilitamasterpage"] == null)
                {
                    if (SomaAreasOK == true)
                    {
                        Response.Redirect("Propriedades.aspx");
                    }
                    else if (SomaAreasOK == false)
                    {
                        if (!_operacao.Equals("I"))
                        {
                            Label1.Text = "Soma das áreas na aba 'Sub-Cadastros'</br> excedem o máximo de área disponível.";
                            PanelErro.Visible = true;
                        }
                        else { Response.Redirect("Propriedades.aspx"); }
                    }
                }
                else
                {
                    if (SomaAreasOK == true)
                    {
                        Response.Redirect("Propriedades.aspx?idt=" + Request["idt"] + _filtro);
                    }
                    else if (SomaAreasOK == false)
                    {
                        if (!_operacao.Equals("I"))
                        {
                            Label1.Text = "Soma das áreas na aba 'Sub-Cadastros'</br> excedem o máximo de área disponível.";
                            PanelErro.Visible = true;
                        }
                        else { Response.Redirect("Propriedades.aspx?idt=" + Request["idt"] + _filtro); }
                    }
                }
            }
            

            
         

        /// <summary>
        /// Metodo que auxilia a gravação dos dados de evolução da propriedade
        /// </summary>
        /// <param name="TPO_VINC">Vinculo</param>
        /// <param name="Grid">Referencia do GridView</param>
        /// <param name="Evolucao">Indica se é uma evolução</param>
        /// <param name="idt_evolucao">Identificador da Evolução</param>
        private void BensPropriedades(string TPO_VINC, ref GridView Grid, bool Evolucao, string idt_evolucao)
        {
            DataTable DT = CBensPropriedades.ObterTodos(UsuAut.Login);
            foreach (GridViewRow row in Grid.Rows)
            {
                string idt_prop = _idt_prop;
                string tpo_vinc = TPO_VINC;
                string idt_desc = Grid.DataKeys[row.RowIndex]["IDT_DESC"].ToString();
                string ano = DateTime.Now.Year.ToString();
                string quant = ((TextBox)row.FindControl("tbQuantidade")).Text;
                string quant1 = ((TextBox)row.FindControl("tbQuantidade1")).Text;
                string quant2 = ((TextBox)row.FindControl("tbQuantidade2")).Text;
                string nome = CDescricoesOpcoes.PesquisaporCodigo(idt_desc, UsuAut.Login).Descricao;
                CBensPropriedades Prop = new CBensPropriedades("0", idt_prop, idt_desc, quant, ano, tpo_vinc, nome, "", "",quant1,quant2);
                if (Evolucao)
                {
                    if (((CheckBox)Grid.Rows[row.RowIndex].Cells[0].Controls[0]).Checked == true)
                    {
                        Prop.Idt_Evolucao = idt_evolucao;
                        Prop.Incluir(usuAut.Login, true);
                    }
                }
            }
        }

        private void EvolucaoVinculos(string Idt_Evolucao)
        {
            DataTable dt = CVinculosPropriedades.ObterPorIDT_PROP(_idt_prop,usuAut.Login);
            CVinculosPropriedades dao = new CVinculosPropriedades();
            foreach (DataRow row in dt.Rows)
            {
                dao.area_util = row["AREA_ARRENDADA"].ToString();
                dao.Cond_prod = row["COND_PROD"].ToString();
                dao.Dat_ini = row["DAT_INI"].ToString();
                dao.Dat_ter = row["DAT_TER"].ToString();
                dao.Idt_benef = row["IDT_BENEF"].ToString();
                dao.Idt_prop = row["IDT_PROP"].ToString();
                dao.Seq_vinc = row["SEQ_VINC"].ToString();
                dao.Status = row["STATUS"].ToString();
                dao.Idt_vinc_prop = row["IDT_VINC_PROP"].ToString();
                dao.Idt_Evolucao = Idt_Evolucao;

                dao.Inserir(usuAut.Login, true);
            }
        }
        /// <summary>
        /// Metodo para criar o primeiro vinculo da propriedade com o seu dono..
        /// </summary>
        /// <param name="Prop">Objeto da classe CPropriedades</param>
        private void PrimeiroVinculoBeneficiario(CPropriedades Prop)
        {
            string benef = Prop.idt_benef;
            if (benef == "" || benef == null)
            {
                benef = CBeneficiarios.PesquisarCpf(Prop.Cpf,UsuAut.Login).Idt_benef;
            }
            string Cond_Prod = CBeneficiarios.PesquisaporCodigo(benef, UsuAut.Login,false).Cond_Produtor;
            string idt_vinc = CVinculosPropriedades.ObterIdtVinc(UsuAut.Login).ToString();            

            switch (Cond_Prod)
            {
                case "1": {
                    CVinculosPropriedades Vinc = new CVinculosPropriedades(Prop.Idt_prop,benef,idt_vinc,"0",DateTime.Now.ToString(),"A",null,"0", Cond_Prod);
                    Vinc.Inserir(UsuAut.Login, false);
                    break;
                }
                case "2": { break; }
                case "3": { break; }
                case "4": {
                    CVinculosPropriedades Vinc = new CVinculosPropriedades(Prop.Idt_prop, benef, idt_vinc, "0", DateTime.Now.ToString(), "A", null, "0", Cond_Prod);
                    Vinc.Inserir(UsuAut.Login, false);
                    break; 
                }
               
            }
            
        }
        protected void Cancelar_Button_Click(object sender, EventArgs e)
        {
            if (Session["desabilitamasterpage"] == null)
            {
                Response.Redirect("Propriedades.aspx" + _filtro);
            }
            else
            {
                Response.Redirect("Propriedades.aspx?idt=" + Request["idt"] + _filtro);
            }
        }




        /// <summary> Vinicius Cruz 17-02-2011  
        /// Método que Auxilia no cadastro de propriedades
        /// </summary>
        /// <remarks>
        /// • Pesquisa a partir do cpf, um beneficiario
        /// • se houver beneficiario, verifica se ele é do tpo que precisa de propriedade e se pode ser dono de uma
        /// </remarks>
        /// <param name="cpf">CPF do beneficiario</param>
        private void VerificaCpf(string cpf)
        {
            string aux = CPropriedades.PesquisaPeloCpf(cpf);
            if (aux != "N")
            {
                CBeneficiarios Beneficiario = CBeneficiarios.PesquisaporCodigo(aux, usuAut.Login,false);
                if (Beneficiario.Cond_Produtor == null || Beneficiario.Cond_Produtor == "")
                {
                    CTiposBeneficiarios TpoBenef = new CTiposBeneficiarios();
                    TpoBenef = CTiposBeneficiarios.PesquisaporCodigo(Beneficiario.Idt_tpo_benef, usuAut.Login);
                    Label1.Text = "Beneficiário do tipo " + TpoBenef.Dsc_tpo_benef + " não pode ou não precisa ter propriedade";
                    PanelErro.Visible = true;
                }
                else if (Beneficiario.Cond_Produtor == "1" || Beneficiario.Cond_Produtor == "4")
                {
                    txtNomeBenef.Text = Beneficiario.Nom_benef;
                    txtNomeBenef.Text = Beneficiario.Nom_benef;                    
                }
                else if (Beneficiario.Cond_Produtor == "2" ||Beneficiario.Cond_Produtor == "3" ||Beneficiario.Cond_Produtor == "5" ||Beneficiario.Cond_Produtor == "6" ||Beneficiario.Cond_Produtor == "7" || Beneficiario.Cond_Produtor == "8")
                {
                    CTiposVincPropriedades BeneficiarioProp = CTiposVincPropriedades.PesquisaporCodigo(Beneficiario.Cond_Produtor, UsuAut.Login);
                    Label1.Text = "Produtor do tipo " + BeneficiarioProp.Dsc_vinc_prop + " não pode ter propriedade em seu nome";
                    PanelErro.Visible = true;
                }

            }
           
            
        }

        protected void ddlMunicipio_TextChanged(object sender, EventArgs e)
        {
            SqlComunidade.DataBind();
            ddlComunidade.DataBind();
        }

        /// <summary>
        /// Carrega o gridview 'gvbenef'
        /// </summary>
        private void CarregargvBenef(bool Evolucao)
        {
            tbAreaUtil.Text = "";
            tbAreaUtil.Enabled = false;
            tbCPFVinc.Focus();
            tbCPFVinc.Text = "";
            lbVincErro.Visible = false;
            lberroarea.Visible = false;
            string idt = "";
            if (Evolucao)
            {
                idt = Criptografia.Descriptografar(Request["evolucao"].Replace(" ", "+"));
                gvBenef.Columns[4].Visible = false;
                gvBenef.Columns[5].Visible = false;
            }
            else
            {
                idt = _idt_prop;
            }
            gvBenef.DataSource = CVinculosPropriedades.ObterPorIDT_PROP(idt,Evolucao);            
            gvBenef.DataBind();
        }

       
        protected void btnInserirVnc_Click(object sender, EventArgs e)
        {
                if (hfIdt_vinc.Value == "")
                {
                    _idt_vinc_prop = CVinculosPropriedades.ObterIdtVinc(UsuAut.Login).ToString();

                    try
                    {
                        CBeneficiarios Beneficiario = CBeneficiarios.PesquisarCpf(tbCPFVinc.Text, UsuAut.Login);
                        CVinculosPropriedades vinc = new CVinculosPropriedades(_idt_prop, Beneficiario.Idt_benef, _idt_vinc_prop, "0", DateTime.Now.ToString(), "A", null, tbAreaUtil.Text, Beneficiario.Cond_Produtor);
                        vinc.Inserir(UsuAut.Login, false);
                        CarregargvBenef(false);
                    }
                    catch
                    {
                        lbVincErro.Text = "Erro com o CPF. Tente novamente.";
                        tbCPFVinc.Text = "";
                        tbCPFVinc.Focus();
                        lbVincErro.Visible = true;
                    }
                }
                else if (hfIdt_vinc.Value != null)
                {
                    CVinculosPropriedades.UpdateArea(hfIdt_vinc.Value, tbAreaUtil.Text);
                    CarregargvBenef(false);
                }
        }

        /// <summary>
        /// Botões Editar e Excluir do gridview
        /// *Excluir só atualiza com a data de termino...
        /// Vinicius Cruz
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void gvBenef_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "del")
            {
                int linha = int.Parse(e.CommandArgument.ToString());
                string cod = gvBenef.DataKeys[linha]["IDT_VINC_PROP"].ToString();

                CVinculosPropriedades.InserirDtFim(cod, UsuAut.Login);
                tbCPFVinc.Text = "";
                tbAreaUtil.Text = "";
                CarregargvBenef(false);
            }
            if (e.CommandName == "edit")
            {
                int linha = int.Parse(e.CommandArgument.ToString());
                tbCPFVinc.Text = gvBenef.DataKeys[linha]["CPF"].ToString();
                tbAreaUtil.Text = gvBenef.DataKeys[linha]["AREA_ARRENDADA"].ToString();
                lbVincErro.Text = "Atualizar o Beneficiaário " + gvBenef.Rows[linha].Cells[0].Text;
                lbVincErro.Visible = true;
                tbAreaUtil.Enabled = true;
                btnInserirVnc.Enabled = true;
                tbAreaUtil.Focus();
                hfIdt_vinc.Value = gvBenef.DataKeys[linha]["IDT_VINC_PROP"].ToString();
                
            }
        }       

       protected void txtCpf_TextChanged(object sender, EventArgs e)
        {
            VerificaCpf(txtCpf.Text);
        }

        protected void gvBenef_RowEditing(object sender, GridViewEditEventArgs e)
        {

        }

        /// <summary>
        /// Evento que auxilia na hora de distinguir o botão se é para atualizar ou criar novo,
        /// por meio do HiddenField.
        /// Vinicius Cruz 02/05/2011 
        /// </summary>        
        protected void tbCPFVinc_TextChanged(object sender, EventArgs e)
        {
            CBeneficiarios OBJ = CBeneficiarios.PesquisarCpf(tbCPFVinc.Text, UsuAut.Login);
             if (OBJ.Cond_Produtor == null)
            {
                lbVincErro.Visible = true;
                tbCPFVinc.Text = "";
                tbCPFVinc.Focus();
                tbAreaUtil.Enabled = false;
                lbVincErro.Text = "Nenhum Beneficiário foi cadastrado com esse CPF.";
            }else if (OBJ.Cond_Produtor != "999" && OBJ.Cond_Produtor != null)
            {
                //Verifica se o cpf digitado já está cadastrado
                hfIdt_vinc.Value = null;
                foreach(GridViewRow row in gvBenef.Rows)
                {
                    if (gvBenef.DataKeys[row.RowIndex]["CPF"].ToString() == tbCPFVinc.Text)
                    {
                        hfIdt_vinc.Value = gvBenef.DataKeys[row.RowIndex]["IDT_VINC_PROP"].ToString();
                        break;
                    }
                }
                tbAreaUtil.Enabled = true;
                tbAreaUtil.Focus();
                tbAreaUtil.Text = "";
                lbVincErro.Text = "Beneficiario: " + OBJ.Nom_benef + " do tipo: " + CTiposVincPropriedades.PesquisaporCodigo(OBJ.Cond_Produtor, UsuAut.Login).Dsc_vinc_prop + ".";
                lbVincErro.Visible = true;
            }
            else
            {
                lbVincErro.Text = "Beneficiario não precisa ter propriedade";
                lbVincErro.Visible = true;
                tbAreaUtil.Enabled = false;
                btnInserirVnc.Enabled = false;
                lberroarea.Visible = false;
                tbCPFVinc.Focus();
            }
        }          

        protected void tbCNPJ_TextChanged(object sender, EventArgs e)
        {
            if (Biblio.ValidaCNPJ(Biblio.FormateCNPJ(tbCNPJ.Text)) == false)
            {
                Label1.Text = "CNPJ Inválido";
                PanelErro.Visible = true;
                tbCNPJ.Text = "";
            }
        }

        /// <summary>
        /// Metodo para inserir ou alterar os dados do grid de bens
        /// </summary>
        /// <param name="tpo"></param>
        /// <param name="Grid"></param>
        protected void AtualizarGridBens(ref GridView Grid, string tpo)
        {
            DataTable tb = CBensPropriedades.PesquisarPorPropriedade(_idt_prop, UsuAut.Login);
            foreach (GridViewRow row in Grid.Rows)
            {
                if (((CheckBox)row.FindControl("CheckBens")).Checked == true)
                {
                    string quant = ((TextBox)row.FindControl("tbQuantidade")).Text;
                    string quant1 = ((TextBox)row.FindControl("tbQuantidade1")).Text;
                    string quant2 = ((TextBox)row.FindControl("tbQuantidade2")).Text;
                    string bem = Grid.Rows[row.RowIndex].Cells[1].Text;
                    string idt_desc = CBensPropriedades.PesquisarPorIdtDesc(Grid.DataKeys[row.RowIndex]["IDT_DESC"].ToString(), UsuAut.Login).Idt_desc;
                    if (idt_desc == null)
                    {
                        idt_desc = Grid.DataKeys[row.RowIndex]["IDT_DESC"].ToString();
                        CBensPropriedades dao = new CBensPropriedades(CBensPropriedades.ObterIdt(), _idt_prop, idt_desc, quant, DateTime.Now.Year.ToString(), tpo, bem, "", "", quant1, quant2);
                        dao.Incluir(UsuAut.Login, false);
                    }
                    else
                    {
                        string IDT_BENS_PROPRIEDADES = CBensPropriedades.PesquisarPorIdtDesc(Grid.DataKeys[row.RowIndex]["IDT_DESC"].ToString(), UsuAut.Login).Idt_Bens_prop;
                        CBensPropriedades dao = new CBensPropriedades(IDT_BENS_PROPRIEDADES, _idt_prop, idt_desc, quant, DateTime.Now.Year.ToString(), tpo, bem, "", "", quant1, quant2);
                        dao.Alterar(usuAut.Login, "Q");
                    }
                }
                else
                {
                    int linha = tb.Rows.Count;
                    for (int i = 0; i < linha; i++)
                    {
                        string idt_desc = Grid.DataKeys[row.RowIndex]["IDT_DESC"].ToString();
                        if (idt_desc == tb.Rows[i]["IDT_DESC"].ToString())
                        {
                            CBensPropriedades dao = CBensPropriedades.PesquisarPorIdtDesc(idt_desc, UsuAut.Login);
                            dao.Alterar(UsuAut.Login, "D");
                        }
                    }
                }

            }
        }

        /// <summary>
        /// Metodo para encher o grid dentro do accordion com informações da propriedade
        /// </summary>
        /// <param name="Grid"></param>
        private void CarregarGrid(ref GridView Grid, bool Evolucao)
        {
            DataTable tb = new DataTable();
            if (!Evolucao)
            {
               tb = CBensPropriedades.PesquisarPorPropriedade(_idt_prop, UsuAut.Login);
            }
            else
            {
                tb = CBensPropriedades.PesquisarPorEvolucao(Criptografia.Descriptografar(Request["evolucao"].ToString()), usuAut.Login);
            }
            foreach (GridViewRow row in Grid.Rows)
            {
                CheckBox cb = ((CheckBox)row.FindControl("CheckBens"));
                TextBox tb0 = ((TextBox)row.FindControl("tbQuantidade"));
                TextBox tb1 = ((TextBox)row.FindControl("tbQuantidade1"));
                TextBox tb2 = ((TextBox)row.FindControl("tbQuantidade2"));
                int linha = tb.Rows.Count;
                for (int i = 0; i < linha; i++)
                {
                    if (Grid.DataKeys[row.RowIndex]["IDT_DESC"].ToString() == tb.Rows[i]["IDT_DESC"].ToString())
                    {
                        cb.Checked = true;
                        tb0.Text = tb.Rows[i]["QUANT_PROP"].ToString();
                        tb1.Text = tb.Rows[i]["QUANT2_PROP"].ToString();
                        tb2.Text = tb.Rows[i]["QUANT3_PROP"].ToString();
                    }
                }
            }
        }

        /// <summary>
        /// metodo para preencher o grid de dentro do accordion pela primeira vez
        /// </summary>
        /// <param name="Grid"></param>
        /// <param name="tpo"></param>
        protected void GridPreencher(ref GridView Grid, string tpo,bool somarcado)
        {
            DataTable dt = CBensPropriedades.PreencherGrid(tpo, somarcado);
            Grid.DataSource = dt;
            Grid.DataBind();
            foreach (GridViewRow row in Grid.Rows)
            {
                Label lb = (Label)row.FindControl("lbUnidade");
                Label lb1 = (Label)row.FindControl("lbUnidade1");
                Label lb2 = (Label)row.FindControl("lbUnidade2");
                TextBox tb = (TextBox)row.FindControl("tbQuantidade");
                TextBox tb1 = (TextBox)row.FindControl("tbQuantidade1");
                TextBox tb2 = (TextBox)row.FindControl("tbQuantidade2");

                lb.Text = dt.Rows[row.RowIndex][3].ToString();
                if (lb.Text == "")
                {
                    tb.Visible = false;
                }
                lb1.Text = dt.Rows[row.RowIndex][4].ToString();
                if (lb1.Text == "")
                {
                    tb1.Visible = false;
                }
                lb2.Text = dt.Rows[row.RowIndex][5].ToString();
                if (lb2.Text == "")
                {
                    tb2.Visible = false;
                }
            }
            if (_operacao.Equals("E"))
            {
                CarregarGrid(ref Grid, true);
            }
            else
            {
                CarregarGrid(ref Grid, false);
            }
        }
        
        protected void FormView1_PreRender(object sender, EventArgs e)
        {
            if (Request.QueryString["OP"].ToString().Equals("U"))
            {
                FormView1.DataSource = PreencherForm(_idt_prop);
                FormView1.DataBind();
            }            
        }
        /// <summary>
        /// Metódo usado para preencher um FormView com  os Detalhes de uma propriedade
        /// </summary>
        /// <param name="idtProp">Codigo da proprriedade</param>
        /// <returns>DataTable com os dados obtidos</returns>
        public DataTable PreencherForm(string idtProp)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("AREADISP"));
            dt.Columns.Add(new DataColumn("AREABENEF"));
            dt.Columns.Add(new DataColumn("AREALOTA"));

            CPropriedades Propriedade = CPropriedades.PesquisaporCodigo(idtProp, UsuAut.Login, false);
            double area = double.Parse(Propriedade.Area);
            double preservacao = double.Parse(Propriedade.Area_p_perm);

            DataTable Beneficiarios = CVinculosPropriedades.ObterPorIDT_PROP(idtProp, UsuAut.Login);
            double areaporbeneficiario = 0;

            foreach (DataRow row in Beneficiarios.Rows)
            {
                areaporbeneficiario += double.Parse(row["AREA_ARRENDADA"].ToString());
            }

            DataRow rows;
            rows = dt.NewRow();
            rows["AREADISP"] = (area - (areaporbeneficiario + preservacao)).ToString();
            rows["AREABENEF"] = areaporbeneficiario.ToString();
            rows["AREALOTA"] = (areaporbeneficiario + preservacao).ToString();
            dt.Rows.Add(rows);
            ViewState["DataTable"] = dt;
            return dt;

        }
        
        
        protected void FormView1_DataBound(object sender, EventArgs e)
        {
            Label areadisp = (Label)FormView1.FindControl("lblAreaDisponivel");
            Label areabenef = (Label)FormView1.FindControl("lblAreaBenef");
            Label areatotal = (Label)FormView1.FindControl("lblAreaTotal");
            DataTable dt = (DataTable)ViewState["DataTable"];
            areadisp.Text = dt.Rows[0]["AREADISP"].ToString();
            areabenef.Text = dt.Rows[0]["AREABENEF"].ToString();
            areatotal.Text = dt.Rows[0]["AREALOTA"].ToString();
        }

        //Verifica se a area digitada pode ser inserida.
        protected void tbAreaUtil_TextChanged(object sender, EventArgs e)
        {
            double areadisponivel = double.Parse(tbAREA.Text) - double.Parse(txtAreaPreser.Text);
            foreach (GridViewRow row in gvBenef.Rows)
            {
                if (gvBenef.Rows[row.RowIndex].Cells[3].Text != tbCPFVinc.Text)
                {
                    areadisponivel -= double.Parse(gvBenef.Rows[row.RowIndex].Cells[2].Text);
                }
            }
            if (double.Parse(tbAreaUtil.Text) > areadisponivel)
            {
                lberroarea.Text = " Area disponível é de " + areadisponivel + "ha.";
                lberroarea.Visible = true;
            }
            else
            {
                btnInserirVnc.Enabled = true;
                btnInserirVnc.Focus();
            }
        }

        protected double VerificarAreaSubCadastros()
        {
            double SomaDasAreas = AulixiarMetodoVerificar(ref GridCulturas);
            SomaDasAreas += AulixiarMetodoVerificar(ref GridEspecies);
            SomaDasAreas += AulixiarMetodoVerificar(ref GridPastagens);

            return SomaDasAreas;
        }
        protected double AulixiarMetodoVerificar(ref GridView Grid)
        {
            double SomaValor = 0;
            foreach (GridViewRow row in Grid.Rows)
            {
                CheckBox cb = (CheckBox)row.FindControl("CheckBens");
                TextBox tb = (TextBox)row.FindControl("tbQuantidade");
                TextBox tb1 = (TextBox)row.FindControl("tbQuantidade1");
                TextBox tb2 = (TextBox)row.FindControl("tbQuantidade2");
                Label lb = (Label)row.FindControl("lbUnidade");
                Label lb1 = (Label)row.FindControl("lbUnidade1");
                Label lb2 = (Label)row.FindControl("lbUnidade2");

                if (cb.Checked == true)
                {
                    if (lb.Text == "ha")
                    {
                        SomaValor += double.Parse(tb.Text);
                    }else if(lb1.Text == "ha")
                    {
                        SomaValor += double.Parse(tb1.Text);
                    }else if(lb2.Text == "ha")
                    {
                        SomaValor += double.Parse(tb2.Text);
                    }
                }
            }

            return SomaValor;
        }


        protected void CheckSomenteMarcados_CheckedChanged(object sender, EventArgs e)
        {
            if (CheckSomenteMarcados.Checked == true)
            {
                GridPreencher(ref GridEspecies, "E", true);
                GridPreencher(ref GridCulturas, "C", true);
                GridPreencher(ref GridRecursos, "R", true);
                GridPreencher(ref GridPastagens, "P", true);
                GridPreencher(ref GridBenfeitorias, "N", true);
            }
            else
            {
                GridPreencher(ref GridEspecies, "E",false);
                GridPreencher(ref GridCulturas, "C",false);
                GridPreencher(ref GridRecursos, "R",false);
                GridPreencher(ref GridPastagens, "P",false);
                GridPreencher(ref GridBenfeitorias, "N",false);
            }
        }

        protected void cbEvolucao_CheckedChanged(object sender, EventArgs e)
        {
            
        }
    }
}